﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Collections.ObjectModel;
using System.Windows.Shapes;
using System.Data;
using produccion.reportes;
using produccion.vistamodelo;

namespace produccion.forms
{
    /// <summary>
    /// Lógica de interacción para FRMpenPorCor.xaml
    /// </summary>
    public partial class FRMpenPorCor : Window
    {
        public FRMpenPorCor()
        {
            InitializeComponent();
        }

        private void butPro_Click(object sender, RoutedEventArgs e)
        {
            penPorCor.Instance.consInforme();
        }

        private void butSal_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void butImp_Click(object sender, RoutedEventArgs e)
        {
            penPorCor.Instance.imprimir();
        }

        private void Window_Closed(object sender, EventArgs e)
        {
            penPorCor.Instance = null;
        }

        private void dataGrid1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            penPorCor.Instance.mostrarPedido();
        }

        private void dataGrid1_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            var elemento = e.OriginalSource as UIElement;
            if (e.Key == Key.Enter && elemento != null)
            {
                e.Handled = true;
                elemento.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
            }
        }

        private void Window_KeyDown(object sender, KeyEventArgs e)
        {
            var elemento = e.OriginalSource as UIElement;
            if (e.Key == Key.F3 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta == true) { MDOgeneral.logBusquedadAbierta = false; }
            }

            if (e.Key == Key.F4 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta1 == true) { MDOgeneral.logBusquedadAbierta1 = false; }
            }

            if (e.Key == Key.F5 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta2 == true) { MDOgeneral.logBusquedadAbierta2 = false; }
            }
        }

        private void chkProgramar_Checked(object sender, RoutedEventArgs e)
        {
            if (chkProgramar.IsChecked == true)
            {
                if (dataGrid1 != null)
                    dataGrid1.Columns[6].Header = "Por Prog.";
            }
        }

        private void chkCortar_Checked(object sender, RoutedEventArgs e)
        {
            if (chkCortar.IsChecked == true)
            {
                if (dataGrid1 != null)
                    dataGrid1.Columns[6].Header = "Por Cortar";
            }
        }

        
    }
       

    public class penPorCor:ObservableObject 
    {
        #region singleton

        private static penPorCor instance = null;

        protected penPorCor()
        {
            consCli();
            MDOgeneral.conectar();
            strTituloVentana = "Informe de pendientes por cortar - Usuario: " + MDOgeneral.usuario + " - [FRMpenPorCor]";
        }
        public static penPorCor Instance
        {
            get
            {
                if (instance == null)
                    instance = new penPorCor();
               return instance;
            }
            set 
            { 
                if (instance != null)
                    instance = null;
            }
       }

        #endregion

        private string _strTituloVentana;
        public string strTituloVentana
        {
            get { return _strTituloVentana; }
            set { _strTituloVentana = value; RaisePropertyChangedEvent("strTituloVentana"); }
        }

        private string _strTipo="C";
        public string strTipo
        {
            get { return _strTipo; }
            set { _strTipo = value; RaisePropertyChangedEvent("strTipo"); }
        }

        DateTime _desde = DateTime.Today;
        public DateTime desde
        {
            get { return _desde; }
            set { _desde = value; RaisePropertyChangedEvent("desde"); }
        }

        DateTime _hasta = DateTime.Today;
        public DateTime hasta
        {
            get { return _hasta; }
            set { _hasta = value; RaisePropertyChangedEvent("hasta"); }
        }

        private VMvisorFotoReferencia _visorFotoReferencia = new VMvisorFotoReferencia();
        public VMvisorFotoReferencia visorFotoReferencia
        {
            get { return _visorFotoReferencia; }
            set { _visorFotoReferencia = value; RaisePropertyChangedEvent("visorFotoReferencia"); }
        }
        
        private ObservableCollection<lisConsulta> _lisInforme = new ObservableCollection<lisConsulta>();
        public ObservableCollection<lisConsulta> lisInforme 
        {
            get { return _lisInforme; }
            set { _lisInforme = value; RaisePropertyChangedEvent("lisInforme"); }
        }

        private DataTable _informe = new DataTable();
        public DataTable informe
        {
            get { return _informe; }
            set { _informe = value; RaisePropertyChangedEvent("informe"); }
        }

        private lisConsulta _selConsulta;
        public lisConsulta selConsulta
        {
            get { return _selConsulta; }
            set
            {
                _selConsulta = value;
                if (_selConsulta != null)
                {
                    visorFotoReferencia.strCodigo = _selConsulta.CODREF_TMP;
                    visorFotoReferencia.strColor = _selConsulta.CODCOL_TMP;
                }
                RaisePropertyChangedEvent("selConsulta");
            }
        }

        private List<clases.CLSMAECLIP> _maecli = new List<clases.CLSMAECLIP>();
        public List<clases.CLSMAECLIP> maecli 
        {
            get { return _maecli; }
            set { _maecli = value; RaisePropertyChangedEvent("maecli"); }
        }

        private clases.CLSMAECLIP _selcli = new clases.CLSMAECLIP();
        public clases.CLSMAECLIP selcli 
        {
            get { return _selcli; }
            set { _selcli = value; RaisePropertyChangedEvent("selcli"); }
        }

        // Campos para mostrar en el detalle del pedido

        private string _pedido;
        public string pedido
        {
            get { return _pedido; }
            set { _pedido = value; RaisePropertyChangedEvent("pedido"); }
        }

        private string _original;
        public string original
        {
            get { return _original; }
            set { _original = value; RaisePropertyChangedEvent("original"); }
        }

        private DateTime _fecha;
        public DateTime fecha
        {
            get { return _fecha; }
            set { _fecha = value; RaisePropertyChangedEvent("fecha"); }
        }

        private DateTime _entrega;
        public DateTime entrega
        {
            get { return _entrega; }
            set { _entrega = value; RaisePropertyChangedEvent("entrega"); }
        }

        private DataTable _infDet = new DataTable("TMPDETPPCP");
        public DataTable infDet
        {
            get { return _infDet; }
            set { _infDet = value; RaisePropertyChangedEvent("infDet"); }
        }

        // Campos para mostrar en el detalle del pedido

        public void consCli() 
        {
            try 
            {
                clases.CLSMAECLIP clie = new clases.CLSMAECLIP();
                maecli = clie.listaCliente();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        public void consInforme() 
        {
            try 
            {
                Mouse.OverrideCursor = Cursors.Wait;
                clases.CLSENCORDP encord = new clases.CLSENCORDP();
                encord.RepOrdPenCor(selcli != null ? selcli.CODCLI_CLI : "", strTipo);
                informe = encord.OrdPenCor;
                lisInforme.Clear();
                foreach (DataRow r in informe.Rows)
                {
                    lisInforme.Add(new lisConsulta
                        {
                            CODCLI_TMP = r["CODCLI_TMP"].ToString(),
                            NOMCLI_TMP = r["NOMCLI_TMP"].ToString(),
                            NROPED_TMP = r["NROPED_TMP"].ToString(),
                            CODREF_TMP = r["CODREF_TMP"].ToString(),
                            CODCOL_TMP = r["CODCOL_TMP"].ToString(),
                            NOMREF_TMP = r["NOMREF_TMP"].ToString(),
                            NOMCOL_TMP = r["NOMCOL_TMP"].ToString(),
                            CANPED_TMP = Convert.ToInt32(r["CANPED_TMP"]),
                            CANPND_TMP = Convert.ToInt32(r["CANPND_TMP"])
                        });
                }
                Mouse.OverrideCursor = Cursors.Arrow;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        public void imprimir() 
        {
            try 
            {
                DataSet ds = new DataSet("dsOrdPenCor");
                DataTable encabezado = new DataTable("ENCABEZADO");
                encabezado.Columns.Add("CLIENTE", System.Type.GetType("System.String"));
                encabezado.Columns.Add("strTitulo", System.Type.GetType("System.String"));
                encabezado.Columns.Add("STREMPRESA", System.Type.GetType("System.String"));
                DataRow r = encabezado.NewRow();
                r["CLIENTE"] = selcli==null ? "TODOS" : selcli.NOMCLI_CLI;
                r["strTitulo"] = strTipo == "C" ? "Por Cortar" : "Por Prog.";
                r["STREMPRESA"] = MDOgeneral.strEmpresaImprime;
                encabezado.Rows.Add(r);
                ds.Tables.Add(encabezado);
                informe.TableName = "TMPPNDCOR";
                ds.Tables.Add(informe.Copy());
                Vista vista = new Vista { ds = ds, reporte = @"reportes\rptOrdPenCor.rpt" };
                vista.Show();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private DataTable _infPedido = new DataTable("TMPDETPPCP");
        public DataTable infPedido
        {
            get { return _infPedido; }
            set { _infPedido = value; RaisePropertyChangedEvent("infPedido"); }
        }

        public void mostrarPedido()
        {
            try
            {
                clases.CLSTEMPORAL tmp1 = new clases.CLSTEMPORAL();
                //Consulto el encabezado del pedido
                tmp1.CONSENCPPCPXX(selConsulta.CODCLI_TMP, selConsulta.NROPED_TMP.Substring(3).Trim());
                foreach (DataRow dr in tmp1.TMPENCPPCPXX.Rows)
                {
                    pedido = dr["NROPED_EPC"].ToString();
                    original = dr["PEDORI_EPC"].ToString();
                    fecha = Convert.ToDateTime(dr["FECPED_EPC"]);
                    entrega = Convert.ToDateTime(dr["FECENT_EPC"]);
                }

                // Consulto el detalle del pedido
                clases.CLSTEMPORAL tmp = new clases.CLSTEMPORAL();
                tmp.CONSDETPPCP(selConsulta.CODCLI_TMP, selConsulta.NROPED_TMP.Substring(3).Trim());
                infPedido = tmp.TMPDETPPCP;
                FRMinfoPedCli2 frm = new FRMinfoPedCli2();
                frm.ShowDialog();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        public class lisConsulta : ObservableObject
        {
            private string _CODCLI_TMP;
            public string CODCLI_TMP
            {
                get { return _CODCLI_TMP; }
                set { _CODCLI_TMP = value; RaisePropertyChangedEvent("CODCLI_TMP"); }
            }
            
            private string _NOMCLI_TMP;
            public string NOMCLI_TMP
            {
                get { return _NOMCLI_TMP; }
                set { _NOMCLI_TMP = value; RaisePropertyChangedEvent("NOMCLI_TMP"); }
            }

            private string _NROPED_TMP;
            public string NROPED_TMP
            {
                get { return _NROPED_TMP; }
                set { _NROPED_TMP = value; RaisePropertyChangedEvent("NROPED_TMP"); }
            }

            private string _CODREF_TMP;
            public string CODREF_TMP
            {
                get { return _CODREF_TMP; }
                set { _CODREF_TMP = value; RaisePropertyChangedEvent("CODREF_TMP"); }
            }

            private string _CODCOL_TMP;
            public string CODCOL_TMP
            {
                get { return _CODCOL_TMP; }
                set { _CODCOL_TMP = value; RaisePropertyChangedEvent("CODCOL_TMP"); }
            }

            private string _NOMREF_TMP;
            public string NOMREF_TMP
            {
                get { return _NOMREF_TMP; }
                set { _NOMREF_TMP = value; RaisePropertyChangedEvent("NOMREF_TMP"); }
            }

            private string _NOMCOL_TMP;
            public string NOMCOL_TMP
            {
                get { return _NOMCOL_TMP; }
                set { _NOMCOL_TMP = value; RaisePropertyChangedEvent("NOMCOL_TMP"); }
            }

            private Int32 _CANPED_TMP;
            public Int32 CANPED_TMP
            {
                get { return _CANPED_TMP; }
                set { _CANPED_TMP = value; RaisePropertyChangedEvent("CANPED_TMP"); }
            }

            private Int32 _CANPND_TMP;
            public Int32 CANPND_TMP
            {
                get { return _CANPND_TMP; }
                set { _CANPND_TMP = value; RaisePropertyChangedEvent("CANPND_TMP"); }
            }


        }

    }



}
